import argparse

from echart.echart_tool import open_chart_html
from monit.process_monitor import process_monitor_info_record_to_file
from monit.system_monitor import SystemMonitorInfo, monitor_info_record_to_file


def argument_parser():
    parser = argparse.ArgumentParser(description="记录系统性能信息(默认)/根据软件名称监控指定软件的进程(含子进程)")

    group = parser.add_mutually_exclusive_group()
    group.add_argument('-s', '--system', help='记录当前系统性能信息', action='store_true', default=True)
    group.add_argument('-p', '--process', help='软件名称,记录软件对应性能信息')

    parser.add_argument('-n', '--name', help='文件名,默认根据当前日期命名', default=None)

    parser.add_argument('-port', help='软件对应的端口号', type=str, default=None)
    parser.add_argument('-it', '--interval_time', help='间隔时,间默认为10秒/次,建议>=5秒/次。', type=int, default=10)
    parser.add_argument('-fp', '--file_period', help='记录周期,默认为7天/次。', type=int, default=7)
    group = parser.add_mutually_exclusive_group()
    # 根据监控文件生成并打开监控图表(Linux不会打开)， 如果监控csv存在重复的时间会生成错误信息(请确定监控csv的日期只有一天)
    group.add_argument('-oh', '--open_html',
                       help='生成并打开xxx.csv从17:10之后的5分钟内的HTML性能图表: D:\\test\\xxx.csv 17:10 5',
                       nargs=3, default=None,
                       metavar=('监控文件.csv路径', '起始时间', '时间间隔'))

    group.add_argument('-ohf', '--open_full_time_range_html',
                       help='生成并打开xxx.csv的全时段的HTML性能图表: D:\\test\\xxx.csv', default=None)
    return parser.parse_args()


if __name__ == "__main__":
    args = argument_parser()
    # args.open_full_time_range_html = r"D:\WORK\PYTHON\monit_tools\2023-08-27_System_MonitorInfo.csv"
    # print(args)  # 调试
    # args.process = 'edge'
    # args.interval_time = 3
    # args.name = 'app'
    # args.port = '8083'
    # args.open_html = [r"Z:\2023-08-08_SystemMonitorInfoApp.csv", '17:39', 5]
    if args.process:
        process_monitor_info_record_to_file(process_name=args.process, process_port=args.port,
                                            file_period=args.file_period, wait_time=args.interval_time)

    elif args.system:
        csv_header = SystemMonitorInfo.csv_header
        if args.open_html:
            open_chart_html(*args.open_html, file_title_list=csv_header)
        elif args.open_full_time_range_html:
            open_chart_html(monit_file_path=args.open_full_time_range_html, file_title_list=csv_header)
        else:
            monitor_info_record_to_file(args.file_period, args.interval_time, expect_file_name=args.name)
